package com.lagou.edu.remote;

import com.lagou.edu.dto.PromotionAdDTO;
import com.lagou.edu.dto.PromotionSpaceDTO;
import com.lagou.edu.reponse.ResponseDTO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;

@FeignClient(name = "edu-ad-boot", path = "/ad")
public interface AdRemoteService {

    /**
     * 查询所有广告位
     *
     * @return
     */
    @GetMapping("/space/getAllSpaces")
    List<PromotionSpaceDTO> getAllSpaces();

    /**
     * 根据id查询广告位
     *
     * @param id
     * @return
     */
    @GetMapping("/space/getAdSpaceById")
    PromotionSpaceDTO getAdSpaceById(@RequestParam("id") Integer id);

    /**
     * 增加和编辑广告位
     *
     * @param promotionSpaceDTO
     * @return
     */
    @PostMapping("/space/saveOrUpdateSpace")
    ResponseDTO saveOrUpdateSpace(@RequestBody PromotionSpaceDTO promotionSpaceDTO);


    /**
     * 前台展示广告信息：
     * 前台广告分为顶部广告和侧边栏广告.前台根据广告位的编号,获取对应广告位的在有效期内的广告并且状态为上架状态的广告.顶部广告可以展示多个,以轮播图形式展示.
     * <p>
     * 查询所有广告位的所有广告：/ad/getAllAds
     *
     * @param keys
     * @return
     */
    @GetMapping("/getAdBySpaceKey")
    List<PromotionSpaceDTO> getAdBySpaceKey(@RequestParam(name = "spaceKey") String[] keys);


    /**
     * 后台广告列表:/ad/getAdList
     * 后台展示系统中所有的广告信息,在列表中可以更改光改的上架或者下架状态
     *
     * @return
     */
    @GetMapping("/getAdList")
    List<PromotionAdDTO> getAdList();

    /**
     * 新增或者编辑广告信息,可以录入广告的名称,状态,开始时间,结束时间,对应的广告位,广告链接以及广告图片等信息.
     *
     * @param promotionAdDTO
     * @return
     */
    @PostMapping("/saveOrUpdateAd")
    ResponseDTO saveOrUpdateAd(@RequestBody PromotionAdDTO promotionAdDTO);

    /**
     * 根据Id查询广告
     *
     * @param id
     * @return
     */
    @GetMapping("/getAdById")
    PromotionAdDTO getAdById(@RequestParam("id") Integer id);
}